package JDBC基础练习;

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Scanner;

public class testJDBC3 {
    public static void main(String[] args) throws SQLException {
        //1.创建一个DataSource实例（DataSource 就是Java中提供操作数据库的类）
        //DataSource描述了数据的来源，在DataSource中设置数据库的地址
        //DataSource是一个JDBC提供的通用接口，各种数据库都和DataSource关联，不能直接创建DataSource的实例
        //MysqlDataSource是驱动包提供的类
        DataSource dataSource=new MysqlDataSource();//向上转型：父类引用 指向 子类实例，


        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java100?characterEncoding=utf8&useSSL=false");//向下转型：子类引用指向父类实例
        //这个代码告知程序数据库服务器在哪，通过一个url来描述服务器的地址
        ((MysqlDataSource)dataSource).setUser("root");
        //这个代码告诉程序告知数据库的用户名
        ((MysqlDataSource)dataSource).setPassword("suojie123");
        //这个代码告知访问数据库的密码


        //2.和数据库建立连接
        //  通过网络和数据库进行连接操作，同时验证用户名和密码
        Connection connection=dataSource.getConnection();//注意处理受查异常

        //3.构造动态sql语句——利用PreparedStatement携带的方法
        //以插入数据为例
        Scanner scanner = new Scanner(System.in);
        System.out.println("输入学号");
        int id=scanner.nextInt();
        System.out.println("输入姓名");
        String name=scanner.next();

        String sql="insert into student values(?,?)";// ? 表示占位符，在后面的代码中会被替换掉

        //这个sql只是一个字符串，要想让MySQL服务器识别，需要吧这个字符串转成一个专门的对象
        PreparedStatement statement=connection.prepareStatement(sql);
        statement.setInt(1,id);//替换第一个 ?
        statement.setString(2,name);
        System.out.println(statement);

        //4.执行sql语句
        //  statement提供两个系列的execute
        //  一个是executeUpdate()，用于增加、删除、修改。返回值为int，表示影响到多少行数据。
        //  一个是executeQuery()，用于查找。返回值为ResultSet，表示返回的是结果集，相当于一个表格。
        int ret=statement.executeUpdate();
        System.out.println("ret="+ret);

        //5.释放相关资源
        statement.close();
        connection.close();
    }
}
